package com.eastelsoft.smartiot.bssserver.model;

import java.text.MessageFormat;
/**
 * Redis key 生成器
 * 
 * @author eastelsoft
 *
 */
public class RedisKeyBuilder {

	private final static String REDIS_KEY_PRE_TOKEN = "tk_";// token对应的登陆信息存放key前缀
	public final static long REDIS_KEY_TOKEN_TIMEOUT = 24 * 60 * 60 * 1000;// Token登陆信息超时24小时
	public final static long REDIS_KEY_HG_TIMEOUT = 24 * 60 * 60 * 1000;// hg登陆信息超时24小时
	private final static String REDIS_KEY_PRE_HOME = "hm_";// HomeLogingLocation信息存放key前缀
	public final static long REDIS_KEY_HOME_TIMEOUT = 7 * 24 * 60 * 60 * 1000;// HomeLogingLocation登陆信息超时7天
	public final static long REDIS_KEY_USER_PAIR_TIMEOUT = 24 * 60 * 60 * 1000;// user_pair指令超时24小时
	private final static String REDIS_KEY_AGENT = "a_";// 开发者，永久
	private final static String REDIS_KEY_VCODE = "vc_";// 找回密码验证码 五分钟
	public final static String REDIS_KEY_SEND_VCODE = "send_vcode111";// 验证码发送队列
	private final static String REDIS_KEY_COUNT_SVR = "count_{0}";//服务触发次数，value;map<hgId,long>
    private final static String REDIS_KEY_SEPARATOR = "_";
	private final static String REDIS_KEY_VCODE_STATUS = "vc_status_{0}";//控制验证码发送频率，有效期 90秒
	private final static String REDIS_KEY_ACCESS_LIMIT = "al_";//访问次数限制（ip/token）
	public final static long REDIS_KEY_AL_TIMEOUT = 60*60*1000;
	public final static long REDIS_KEY_HG_PAIR_TIMEOUT = 40 * 1000;// Token登陆信息超时24小时
	public final static String REDIS_KEY_VIDEO_USER_QUEUE = "send_video_user_queue11";//向app通知视频用户信息
	private final static String REDIS_KEY_OAUTH_CODE = "oauthcode:{0}";// 认证code
	public final static long REDIS_KEY_CODE_TIMEOUT = 5 * 60 * 1000;// code保存5min
	private final static String REDIS_KEY_ACCESS_TOKEN = "accesstoken:{0}";// accesstoken新沃家总管
	public final static long REDIS_KEY_ACCESS_TOKEN_TIMEOUT = 7L*24 * 3600 * 1000;// accesstoken保存7天
	private final static String REDIS_KEY_REFRESH_TOKEN = "refreshtoken:{0}";// refreshtoken
	public final static long REDIS_KEY_REFRESH_TOKEN_TIMEOUT = 180L * 24 * 3600 * 1000;// refreshtoken保存180天
	public final static long REDIS_KEY_WO_VIDEO_TOKEN_TIMEOUT = 1000*60*50;//向沃家总管视频平台同步 有效期
	private final static String REDIS_KEY_WO_VIDEO_SYN_TOKEN = "wo_video_syn_{0}";//向沃家总管视频平台同步token标识
	private final static String REDIS_KEY_ACCESSTOKEN="wo_accesstoken:{0}";// 
	/**
	 * 创建code
	 * @param code
	 * @return
	 */
	public static String buildOauthCode(String code){
		return MessageFormat.format(REDIS_KEY_OAUTH_CODE, code);
	}
	/**
	 * 创建accesstoken
	 * @param accesstoken
	 * @return
	 */
	public static String buildAccessToken(String accesstoken){
		return MessageFormat.format(REDIS_KEY_ACCESS_TOKEN, accesstoken);
	}
	
	
	/**
	 * accessToken对应的用户信息
	 * @param accesstoken
	 * @return
	 */
	public static String buildAccessTokenKey(String accesstoken){
		return MessageFormat.format(REDIS_KEY_ACCESSTOKEN, accesstoken);
	}
	/**
	 * 创建refreshtoken
	 * @param refreshtoken
	 * @return
	 */
	public static String buildRefreshToken(String refreshtoken){
		return MessageFormat.format(REDIS_KEY_REFRESH_TOKEN, refreshtoken);
	}
	
	/**
	 * 向沃家总管摄像头同步access_token标识 有效期50min
	 * @return 
	 */
	public static String buildWoVideoAccessTokenKey(String token){
		return MessageFormat.format(REDIS_KEY_WO_VIDEO_SYN_TOKEN, token);
	}
	/**
	 * 验证码有效期
	 * @param account 要发送验证码的账号
	 * @return
	 */
	public static String buildVcodeStatusKey(String account){
		return MessageFormat.format(REDIS_KEY_VCODE_STATUS, account);
	}


	/**
	 * 服务触发次数key
	 * @param svrId
	 * @return
	 */
	public static String buildSVRCountKey(String svrId) {
		return MessageFormat.format(REDIS_KEY_COUNT_SVR, svrId);
	}
	/**
	 * 服务触发次数key
	 * @param svrId
	 * @return
	 */
	public static String buildSVRCountKeyForMember(String svrId,String memberId) {
		return MessageFormat.format(REDIS_KEY_COUNT_SVR, svrId+memberId);
	}

	/**
	 * 找回密码验证码key
	 *
	 * @param
	 * @return
	 */
	public static String buildVcodeKey(String account, String vcode) {
		return REDIS_KEY_VCODE + account + REDIS_KEY_SEPARATOR + vcode;
	}

	/**
	 * 保存同步到视频系统的token队列
	 * @return 
	 */
	public static String buildSendVideoUserQueueKey(){
		return REDIS_KEY_VIDEO_USER_QUEUE;
	}
	
	/**
	 * 生成Token 对应的登陆信息key
	 * 
	 * @param token
	 * @return
	 */
	public static String buildTokenLoginInfoKey(String token) {
		return REDIS_KEY_PRE_TOKEN + token;
	}


	/**
	 * 生成家庭（用户ID） 对应的登陆信息key
	 * 
	 * @param userId
	 * @return
	 */
	public static String buildHomeLoginInfoKey(String userId) {
		return REDIS_KEY_PRE_HOME + userId;
	}

	

	/**
	 * 开发者 key
	 * 
	 * @param agent
	 * @return
	 */
	public static String buildAgentKey(String agent) {
		return REDIS_KEY_AGENT + agent;
	}

//	/**
//	 * 访问次数限制key
//	 * 第一个参数是客户端ip或者信息上传的token
//	 * @param ipOToken
//	 * @param uri
//	 * @return
//	 */
//	public static String buildAccessLimitKey(String ipOToken ,String uri){
//		MD5 md5 = new MD5(ipOToken+uri);
//		return REDIS_KEY_ACCESS_LIMIT+md5.asHex();
//	}
}
